package com.example.java.escape;

/**
 * @author : weicai
 * @date : 10:13 2020/11/10
 * 空指针异常
 */
public class WhatIsNpe {
    public static class User {
        private String name;
        private String[] test;

        public void print() {
            System.out.println("This is user class!");
        }

        public String sleep() {
            System.out.println("I have to go to sleep!");
            return null;
        }
    }


    public static void main(String[] args) {
        //第一种情况：没有实例化对象而直接调用对象的方法（当实例化（new）对象时才会去堆里给对象分配内存空间）
//        User user1 = null;
//        user1.print();

        //第二种情况：调用没有实例化对象的属性
//        User user2 = null;
//        System.out.println(user2.name);

        //第三种情况：已实例化对象但计算未定义数组的长度
//        User user3 = new User();
//        System.out.println(user3.test.length);

        //
//        User user4 =  new User();
//        user4.sleep()

        //双亲委派
        ClassLoader c = WhatIsNpe.class.getClassLoader() ;
        ClassLoader c1= c.getParent( );
        ClassLoader c2 = c1.getParent() ;
        System.out.println(c);
        System.out.println(c1);
        //ExtClassLoader的父类加载是BootstrapClassLoader，是使用C++实现的，返回null
        System.out.println(c2);



    }

}
